LINQ projectie operatoren
Select
De Select
queryoperator transformeert elk element in de invoersequentie naar een element in de uitvoersequentie. In de uitvoerreeks zitten evenveel elementen als in de invoerreeks.
De volgende query projecteert de inputreeks van Personen
elementen op een outputreeks van string
elementen. De lambda-expressie is een beschrijving van de projectie: het nemen van elk element in personen
invoerreeks en het terugsturen van een string
element.
Personen[] personen = { new Personen { Name = "Jan", Leeftijd = 60 }, new Personen { Name = "An", Leeftijd = 100 }, new Personen { Name = "Peter", Leeftijd = 15 }, new Personen { Name = "Marijke", Leeftijd = 40 }, new Personen { Name = "Judith", Leeftijd = 20 } }; IEnumerable<string> persoonsNamen = personen.Select(x => x.Name); Console.WriteLine("Namen van de personen:"); foreach (string name in persoonsNamen) { Console.WriteLine(name); }
Dit is de output:
De lambda-expressie kan behoorlijk complex worden zoals in het volgende voorbeeld:
Personen[] personen = { new Personen { Name = "Jan", Leeftijd = 60 }, new Personen { Name = "An", Leeftijd = 100 }, new Personen { Name = "Peter", Leeftijd = 15 }, new Personen { Name = "Marijke", Leeftijd = 40 }, new Personen { Name = "Judith", Leeftijd = 20 } }; IEnumerable<string> persoonsNamen = personen.Select( x => String.Format("De lengte van de naam {0} is {1}.", x.Name, x.Name.Length)); Console.WriteLine("Namen van de personen:"); foreach (string name in persoonsNamen) { Console.WriteLine(name); }
SelectMany
Voegt collecties in een enkele collectie samen. Is vergelijkbaar met cross join van SQL.
Deze lambda-expressie monster kruist twee arrays, en produceert een Cartesiaans product.
Personen[] personen = { new Personen { Name = "Jan", Leeftijd = 60 }, new Personen { Name = "An", Leeftijd = 100 }, new Personen { Name = "Peter", Leeftijd = 15 }, new Personen { Name = "Marijke", Leeftijd = 40 }, new Personen { Name = "Judith", Leeftijd = 20 } }; string[] fruitSoorten = { "Appel", "Sinaasappel", "Druif" }; var PersonenDieFruitEten = personen.SelectMany(persoon => fruitSoorten, (p, f) => new { persoon = p, fruitSoorten = f }); Console.WriteLine("Namen van de personen en het fruit dat ze kunnen eten:"); foreach (var persoonDieFruitEet in PersonenDieFruitEten) { Console.WriteLine(String.Format("{0} eet {1}.", persoonDieFruitEet.persoon.Name, persoonDieFruitEet.fruitSoorten)); }
Deze creëert een outputreeks waarvan elk bestaat uit een Personen element en een Fruitsoort element: